package com.cec.utils;



import io.jsonwebtoken.*;
import lombok.extern.slf4j.Slf4j;

import java.util.Date;
import java.util.Map;
import java.util.UUID;

@Slf4j
public class JwtUtil {
    /**
     * 生成token
     * @param outTime 过期时间
     * @param sign 盐值 签名
     * @param claim 载荷
     * @return
     */
    public static String createToken(long outTime, String sign, Map<String, Object> claim) {

        //JwtBuilder builder = Jwts.builder();
        // 创建jwtBuilder对象
        JwtBuilder jwtBuilder = Jwts.builder()
                // Head 设置头部
                .setHeaderParam("typ", "JWT") // 指定JWT类型
                .setHeaderParam("alg", "HS256") // 指定算法
                // Payload 设置载荷
                .setClaims(claim)

                //.setSubject("admin-test") // 设置名称信息
                .setExpiration(new Date(System.currentTimeMillis() + outTime)) //设置过期时间
                .setId(UUID.randomUUID().toString()) // 设置id字段
                // sign 设置签名
                .signWith(SignatureAlgorithm.HS256, sign);// 设置加密算法和签名
// 使用 . 符号连接设置的以上三个部分 返回字符串

        return jwtBuilder.compact();
    }

    /**
     * jwt解析
     * @param secretKey jwt密钥
     * @param token jwt生成的token
     * @return
     */
    public static Claims parserToken(String secretKey, String token) {
        log.info("parserJWT token：{}", token);
        // 得到DefaultJwtParser
        Claims claims = Jwts.parser()
                // 设置签名的秘钥
                .setSigningKey(secretKey)
                // 设置需要解析的jwt
                .parseClaimsJws(token).getBody();
        return claims;
    }
}
